package apt.tutorial.two;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.View;
import android.util.Log;
import android.widget.Button;
import android.widget.EditText;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.HttpVersion;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.json.JSONObject;

public class Patchy extends Activity {
	private DefaultHttpClient client=null;
	private EditText user=null;
	private EditText password=null;
	private EditText status=null;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		user=(EditText)findViewById(R.id.user);
		password=(EditText)findViewById(R.id.password);
		status=(EditText)findViewById(R.id.status);
		
		Button send=(Button)findViewById(R.id.send);
		
		send.setOnClickListener(onSend);
		
		client=new DefaultHttpClient();
	}
	
	@Override
	public void onDestroy() {
		super.onDestroy();
		
		client.getConnectionManager().shutdown(); 
	}
	
	private String getCredentials() {
		String u=user.getText().toString();
		String p=password.getText().toString();
		
		return(Base64.encodeBytes((u+":"+p).getBytes()));
	}
	
	private void updateStatus() {
		try {
			String s=status.getText().toString();
			
			HttpPost post=new HttpPost("https://identi.ca/api/statuses/update.json");
			
			post.addHeader("Authorization",
										 "Basic "+getCredentials());
			
			List<NameValuePair> form=new ArrayList<NameValuePair>();
			
			form.add(new BasicNameValuePair("status", s));
	
			post.setEntity(new UrlEncodedFormEntity(form, HTTP.UTF_8));
	
			ResponseHandler<String> responseHandler=new BasicResponseHandler();
			String responseBody=client.execute(post, responseHandler);
			JSONObject response=new JSONObject(responseBody);
		}
		catch (Throwable t) {
			Log.e("Patchy", "Exception in updateStatus()", t);
			goBlooey(t);
		}
	}
	
	private void goBlooey(Throwable t) {
		AlertDialog.Builder builder=new AlertDialog.Builder(this);
		
		builder
			.setTitle("Exception!")
			.setMessage(t.toString())
			.setPositiveButton("OK", null)
			.show();
	}
	
	private View.OnClickListener onSend=new View.OnClickListener() {
		public void onClick(View v) {
			updateStatus();
		}
	};
}